//
//  XWXSqliteDatabase.h
//  XWXSqlite
//
//  Created by 许卫星 on 17/9/7.
//  Copyright © 2017年 wxxu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "XWXSqliteDatabase.h"
#import "XWXSqliteQueryCommand.h"
#import "XWXSqliteQueryCommand+Table.h"
#import "XWXSqliteQueryCommand+IUD.h"
#import "XWXSqliteQueryCommand+Query.h"

@interface XWXSqliteManager : NSObject

#pragma mark - 查询

/**
 查询数据，默认不去重

 @param cls    数据模型
 @param dbName 数据库，使用默认库传nil

 @return 数据
 */
+ (NSArray *)selectWithModelClass: (Class)cls withDBName: (NSString *)dbName;

/**
 查询数据

 @param cls        数据模型
 @param dbName     数据库，使用默认库传nil
 @param isDistinct 是否去重

 @return 数据
 */
+ (NSArray *)selectWithModelClass: (Class)cls withDBName: (NSString *)dbName isDistinct:(BOOL)isDistinct;

/**
 根据条件查询

 @param cls          数据模型
 @param dbName       数据库，使用默认库传nil
 @param columLists   需要查询的字段
 @param columnName   where条件字段
 @param relationType 条件类型
 @param value        where条件值
 @param isDistinct   是否去重

 @return 数据
 */
+ (NSArray *)selectWithModelClass: (Class)cls withDBName: (NSString *)dbName columLists:(NSString *)columLists columnName:(NSString *)columnName relation:(ColumnNameToValueRelationType)relationType value:(id)value isDistinct:(BOOL)isDistinct;
#pragma mark - 增删改
/**
 插入数据
 
 @param model    需要保存的模型类
 @param dbName 需要保存到哪个库，使用默认库传nil

 @return 是否成功
 */
+ (BOOL)insertWithModel: (id)model withDBName: (NSString *)dbName;

/**
 修改数据

 @param model     对象模型
 @param dbName    数据库，使用默认库传nil
 @param condition 修改条件 如name='xxx'

 @return 是否成功
 */
+ (BOOL)updateWithModel: (id)model withDBName: (NSString *)dbName whereCondition:(NSString *)condition;
+ (BOOL )updateWithModel: (id)model withDBName: (NSString *)dbName columnName:(NSString *)columnName relation:(ColumnNameToValueRelationType)relationType value:(id)value;


/**
 删除数据

 @param cls       对象模型
 @param dbName    数据库，使用默认库传nil
 @param condition 删除条件 如name='xxx'

 @return 是否成功
 */
+ (BOOL)deleteWithModelClass: (Class)cls withDBName: (NSString *)dbName whereCondition:(NSString *)condition;
+ (BOOL)deleteWithModelClass: (Class)cls withDBName: (NSString *)dbName columnName:(NSString *)columnName relation:(ColumnNameToValueRelationType)relationType value:(id)value;

#pragma mark - 操作表格
/**
 创建表格
 
 @param cls    需要保存的模型类
 @param dbName 需要保存到哪个库，使用默认库传nil
 
 @return 是否成功
 */
+ (BOOL)createTableWithModelClass: (Class)cls withDBName: (NSString *)dbName;

/**
 删除表格
 
 @param cls    数据模型类
 @param dbName 数据库名称，使用默认库传nil
 
 @return 是否成功
 */
+ (BOOL)dropTableWithModelClass: (Class)cls withDBName: (NSString *)dbName;

@end
